package ru.niir.goodfil.db;

import org.apache.commons.lang.StringUtils;

import javax.persistence.Table;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Column;
import java.io.Serializable;
import java.util.GregorianCalendar;
import java.util.Calendar;
import java.text.SimpleDateFormat;
import java.math.BigDecimal;
import java.math.RoundingMode;

/**
 * Расширенная информация о доставке, связанная с заказом.
 */
@Entity
@Table(name = "`OrdersDeliveryInfoExt`")
public class OrderDeliveryInfoExt implements Serializable
{
    /**
     * Идентификатор заказа
     */
    @Id
    @Column(name = "`Id`")
    private long orderId = -1;

    /**
     * Тип оплаты (1 - наличный расчет, 0 - безналичный)
     */
    @Column(name = "`PayType`")
    private boolean payType;

    /**
     * Наименование транспортной компании
     */
    @Column(name = "`TransportName`")
    private String transportName;

    /**
     * ФИО контактного лица со стороны транспортной компании
     */
    @Column(name = "`TransportContactFio`")
    private String transportContactFio;

    /**
     * Адрес транспортной компании
     */
    @Column(name = "`TransportAddress`")
    private String transportAddress;

    /**
     * Телефон транспортной компании
     */
    @Column(name = "`TransportTel`")
    private String transportTel;

    /**
     * Адрес получателя
     */
    @Column(name = "`TargetAddress`")
    private String targetAddress;

    /**
     * ФИО контактного лица со стороны получателя
     */
    @Column(name = "`TargetContactFio`")
    private String targetContactFio;

    /**
     * Телефон получателя
     */
    @Column(name = "`TargetTel`")
    private String targetTel;

    /**
     * Интервал до даты отгрузки по-умолчанию.
     * Это поле позволяет устанавливать для нового заказа дату отгрузки автоматически, как текущая дата плюс значение данного поля.
     */
    @Column(name = "`Period`")
    private int period;

    /**
     * Комментарий
     */
    @Column(name = "`Comment`")
    private String comment;



    public OrderDeliveryInfoExt(long orderId) {
        this.orderId = orderId;
    }

    public OrderDeliveryInfoExt() {
    }

    public String getPayTypeAsString()
    {
        return payType ? "Наличный расчет" : "Безналичный расчет";
    }



    /**
     * Информация о доставке передается в 1С в виде строки
     */
//    public String get1CExportString()
//    {
//        StringBuilder sb = new StringBuilder();
//        sb.append(getPayTypeAsString() + ". ");
//
//        if (!StringUtils.isBlank(getTransportName()))
//        {
//            sb.append("ТРАНСПОРТНАЯ КОМПАНИЯ: " + getTransportName() + ". ");
//        }
//
//        if (!StringUtils.isBlank(getTransportContactFio()))
//        {
//            sb.append("КОНТАКТ. ТК: " + getTransportContactFio() + ". ");
//        }
//
//        if (!StringUtils.isBlank(getTransportAddress()))
//        {
//            sb.append("АДРЕС ТК: " + getTransportAddress() + ". ");
//        }
//
//        if (!StringUtils.isBlank(getTransportTel()))
//        {
//            sb.append("ТЕЛ. ТК: " + getTransportTel() + ". ");
//        }
//
//        if (!StringUtils.isBlank(getTargetAddress()))
//        {
//            sb.append("АДРЕС ДОСТ.: " + getTargetAddress() + ". ");
//        }
//
//        if (!StringUtils.isBlank(getTargetContactFio()))
//        {
//            sb.append("КОНТАКТ. ДОСТ.: " + getTargetContactFio() + ". ");
//        }
//
//        if (!StringUtils.isBlank(getTargetTel()))
//        {
//            sb.append("ТЕЛ. ДОСТ.: " + getTargetTel() + ". ");
//        }
//
//        if (!StringUtils.isBlank(getComment()))
//        {
//            sb.append(getComment().toUpperCase());
//        }
//
//        return sb.toString();
//    }

    public String formatExportString(java.sql.Date deliveryDate, BigDecimal weight, BigDecimal volume)
    {
        StringBuilder sb = new StringBuilder();
        sb.append(getPayTypeAsString() + ". ");

        if (deliveryDate != null)
        {
            sb.append("ДАТА ОТГРУЗКИ: ");
            SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy");
            java.util.Date d = new java.util.Date(deliveryDate.getTime());
            sb.append(sdf.format(d));
            sb.append(". ");
        }

        if (!StringUtils.isBlank(getTransportName()))
        {
            sb.append("ТРАНСПОРТНАЯ КОМПАНИЯ: " + getTransportName() + ". ");
        }

        sb.append("ВЕС: " + weight + ". ");
        sb.append("ОБЪЕМ: " + volume + ". ");

        if (!StringUtils.isBlank(getTransportContactFio()))
        {
            sb.append("КОНТАКТ. ТК: " + getTransportContactFio() + ". ");
        }

        if (!StringUtils.isBlank(getTransportAddress()))
        {
            sb.append("АДРЕС ТК: " + getTransportAddress() + ". ");
        }

        if (!StringUtils.isBlank(getTransportTel()))
        {
            sb.append("ТЕЛ. ТК: " + getTransportTel() + ". ");
        }

        if (!StringUtils.isBlank(getTargetAddress()))
        {
            sb.append("АДРЕС ДОСТ.: " + getTargetAddress() + ". ");
        }

        if (!StringUtils.isBlank(getTargetContactFio()))
        {
            sb.append("КОНТАКТ. ДОСТ.: " + getTargetContactFio() + ". ");
        }

        if (!StringUtils.isBlank(getTargetTel()))
        {
            sb.append("ТЕЛ. ДОСТ.: " + getTargetTel() + ". ");
        }

        if (!StringUtils.isBlank(getComment()))
        {
            sb.append(getComment());
        }

        return sb.toString();
    }

    public long getOrderId()
    {
        return orderId;
    }

    public void setOrderId(long orderId)
    {
        this.orderId = orderId;
    }

    public boolean getPayType()
    {
        return payType;
    }

    public void setPayType(boolean payType)
    {
        this.payType = payType;
    }

    public String getTransportName()
    {
        return transportName;
    }

    public void setTransportName(String transportName)
    {
        this.transportName = transportName;
    }

    public String getTransportContactFio()
    {
        return transportContactFio;
    }

    public void setTransportContactFio(String transportContactFio)
    {
        this.transportContactFio = transportContactFio;
    }

    public String getTransportAddress()
    {
        return transportAddress;
    }

    public void setTransportAddress(String transportAddress)
    {
        this.transportAddress = transportAddress;
    }

    public String getTransportTel()
    {
        return transportTel;
    }

    public void setTransportTel(String transportTel)
    {
        this.transportTel = transportTel;
    }

    public String getTargetAddress()
    {
        return targetAddress;
    }

    public void setTargetAddress(String targetAddress)
    {
        this.targetAddress = targetAddress;
    }

    public String getTargetContactFio()
    {
        return targetContactFio;
    }

    public void setTargetContactFio(String targetContactFio)
    {
        this.targetContactFio = targetContactFio;
    }

    public String getTargetTel()
    {
        return targetTel;
    }

    public void setTargetTel(String targetTel)
    {
        this.targetTel = targetTel;
    }

    public int getPeriod()
    {
        return period;
    }

    public void setPeriod(int period)
    {
        this.period = period;
    }

    public String getComment()
    {
        return comment;
    }

    public void setComment(String comment)
    {
        this.comment = comment;
    }    
}
